Шаблонный проект для разработки расширений

Шаблонный проект (m2-plugins-workspace.zip) представляет собой преднастроенную среду для разработки расширений с примерами реализации точек расширения. Это настроенное рабочее пространство (workspace) Angular-CLI, включающее в себя:

  1. Подпроекты демонстрационных расширений;
  2. Специальный Angular-билдер, предназначенный для сборки расширений, готовых для развертывания на портале Semantic MDM

В настоящий момент имеются следующие шаблонные проекты:

Чтобы начать работу, необходимо распаковать архив с шаблонным проектом и в корневом каталоге проекта выполнить команду:

 npm install

После инициализации проекта можно собрать расширение с демонстрационной реализацией точек расширения. Для этого необходимо выполнить команду:

npm run build:

где m2-XXX-plugin - наименование подпроекта демонстрационного расширения, например, m2-buttons-plugin или m2-ref-book-plugin.

Дистрибутив расширения будет сгенерирован в директории dist/.

Вспомогательные материалы

При разработке расширений могут быть использованы сервисы, утилиты и визуальные компоненты платформы из библиотек m2-core, m2-components, включенных в шаблонный проект. Описание этих библиотек поставляется в виде отдельного веб-приложения sdi-web-client-docs.war, которое можно развернуть на сервере приложений WildFly рядом с остальными модулями Sematic MDM, после чего оно станет доступно по ссылке вида http(s)://<адрес_сервера>/sdi-web-client-docs/documentation.

Примеры использования компонентов и ключевых сервисов платформы реализованы в виде встроенного расширения, которое может быть включено штатным образом через пользовательский интерфейс системы (Настройки - Расширения - Встроенные расширения клиента - Описание компонентов), после чего в главном навигационном меню системы появится раздел "Описание компонентов".

В шаблонном проекте также представлен исходный код базового примера расширения с реализацией нестандартной формы заявки.

Шаблонный проект m2-buttons-plugin

Шаблонный проект **m2-buttons-**plugin демонстрирует возможность добавления кнопок в панели инструментов над деревом, таблицей и топ-фрейм меню как в справочниках, так и в классификаторах.

Ключевым классом расширения является M2ButtonsPluginModule, в аннотации @M2Plugin которого объявлены точки расширения типа PanelBtnExtensionPoint, каждая из которых добавляет кнопку в панель, определяемую параметром panel.

Определение точки расширения типа “Кнопка на панели“ предполагает объявление класса-фабрики, используемого базовым приложением для создания кнопки. Несколько кнопок могут быть объявлены с указанием одного и того же класса-фабрики, что позволяет, например, не дублировать его, если в панель инструментов над таблицей в справочнике и классификаторе требуется кнопка, реализующая одну и ту же логику. В шаблонном проекте классом-фабрикой является класс PlainActionBtnFactoryService, реализующий интерфейс PanelBtnFactory. В обработчике нажатия кнопки продемонстрирован пример использования глобальных сервисов базового приложения: сервиса логирования и сервиса уведомлений.

Класс-фабрика BtnWithTemplateFactoryService демонстрирует, как по клику на кнопку реализовать отображение подменю. Нужно обратить внимание на то, что компонент, используемый в качестве подменю (BtnTemplateComponent), должен быть объявлен в поле entryComponentsв аннотации @NgModule() модуля расширения.

Шаблонный проект m2-ref-book-plugin

Шаблонный проект m2-ref-book-plugin демонстрирует пример расширения, предоставляющего альтернативную реализацию представления справочника.

Ключевым классом расширения является M2RefBookPluginModule, в аннотации @M2Plugin которого объявлена точка расширения типа RouterExtensionPoint. Точка расширения добавляет в базовое приложение корневой модуль, управляемый стандартных маршрутизатором Angular, и доступный по пути /demoPluginRefBook, что определяется параметром routerLink.

Необходимо обратить внимание на то, что для модуля, указываемого в качестве реализации справочника в параметре moduleType, должна быть задана конфигурация маршрутизатора с указанием корневого компонента:

RouterModule.forChild([{
path: '', pathMatch: 'full', component: M2RefBookPluginComponent
}])

Указанный компонент M2RefBookPluginComponent и будет являться представлением справочника.